# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from time import sleep
from lxml import etree
from pymongo import MongoClient

url = 'https://www.jd.com/'
# 采用selenium虚拟登录
browser = webdriver.Chrome()    
#url = input('输入网址：')
browser.get(url)
#变量的声明
global page
page=0
global p             
p=1 
# 停顿
wait = WebDriverWait(browser, 10)

def main(key): 
    wait.until(EC.presence_of_element_located((By.ID, 'key'))).send_keys(key)  
    wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'button'))).click()             
#    all_count= browser.find_element_by_xpath('//span[@class="p-skip"]/em/b').text#找到当前商品的最大页数
#    print('一共有{}页'.format(all_count))
    global page
    #输入想要获取到的页数，不超过最大页码数
    page=eval(input('输入页码:'))
    roll()
    
#页面下拉，并获取源代码    
def roll():
    js = "var q=document.documentElement.scrollTop=5000"  #滚动 0 表示页顶 10000表示页底
    browser.execute_script(js) 
    sleep(3)
    js2 = "var q=document.documentElement.scrollTop=10000"
    browser.execute_script(js2) 
    sleep(8)
    html= browser.page_source#获取源网页代码                              
    mo(html)
    sleep(2)

#想要获取到多少页(进行判断)
def clik():
    global p
    global page        
    if p < page:
        p+=1
        print ("正在获取第%s页"%p)
        next_page()


#解析源代码（获取价格、评论、店铺名称、详情链接、图片链接、标题）
def mo(html):
    save_data=[]                    
    htmll = etree.HTML(html)#
    source=htmll.xpath('//div[@class="gl-i-wrap"]')
    #循环每一个li标签，获取值
    for i in range(len(source)):
        D={}
        D['价格']=htmll.xpath('//div[@class="p-price"]/strong/i/text()')[i]
        #获取评论数量
        D['评论']=htmll.xpath('//div[@class="p-commit"]/strong/a/text()')[i]
        #获取店铺名称
        try:
           shop=htmll.xpath('//div[@class="p-shop"]/span/a/text()')[i]
           D['店铺名称']=shop
        except:
            D['店铺名称']='None'
      
        #获取详情页链接
        D['详情链接']='https:'+htmll.xpath('//div[@class="p-commit"]/strong/a')[i].get('href')     
        #获取标题  
        D['标题']=htmll.xpath('//div[@class="p-name p-name-type-2"]/a/em')[i].xpath('string(.)').strip()
        #获取图片链接(观察获取到源代码，与网页中源代码有区别，进行判断)
        image_url=htmll.xpath('////div[@class="p-img"]/a/img')[i].get('data-lazy-img')    
        if image_url =='done':
            image_urll='https:'+htmll.xpath('//div[@class="p-img"]/a/img')[i].get('src')
            D['图片链接']=image_urll
        else:        
            D['图片链接']='https:'+image_url
        save_data.append(D)
        print(save_data)
        print('页面总数为为:{}'.format(len(save_data)))        
    save_db(save_data)    
    clik()
    
#保存数据到数据库当中
def save_db(save_data):
    #连接数据库
    client=MongoClient()
    #创建数据库
    database=client['kouhong']
    #创建集合
    db=database['shop']
    db.insert(save_data)

#设置翻页动作，重复操作
def next_page():    
    browser.find_element_by_xpath('//*[@id="J_bottomPage"]/span[1]/a[9]').click()#获取下一页按钮并点击
    sleep(4)
    roll()

# keys = input("请输入商品：")
#main(keys)
main('口红')

#从数据库中查看是否数量正确
#client=MongoClient()
#database=client['kouhong']
#db=database['shop']
#content=[x for x in db.find()]

#下载图片
#image_url=[]
#for k in range(len(content)):
#    image_url.append(content[k]['图片链接'])

#import requests
#header={
#        'User-Agent': 'Chrome/94.0.4606.61 Safari/537.36'}

#def image_dowload(img_url):   
#    for lo in range(len(img_url)):
#        source=requests.get(image_url[lo],headers=header)
#        with open(str(lo)+'.jpg','wb+') as f:
#            f.write(source.content)
#image_dowload(image_url)    



